package com.graduate.after.utils;

import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeException;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import org.apache.log4j.Logger;
import sun.misc.BASE64Encoder;

import javax.servlet.http.HttpServletResponse;
import java.awt.*;

/**
 * 生成二维码的工具类
 */
public class QRCodeUtils {

    private static Logger log = Logger.getLogger(QRCodeUtils.class.getClass());
    // 自定义参数，这部分是Hutool工具封装的
    private static QrConfig initQrConfig() {
        QrConfig config = new QrConfig(200, 200);
        // 设置边距，既二维码和背景之间的边距
        config.setMargin(3);
        // 设置前景色，既二维码颜色（青色）
        config.setForeColor(Color.CYAN.getRGB());
        // 设置背景色（灰色）
        config.setBackColor(Color.GRAY.getRGB());
        return config;
    }

    /**
     * 生成到文件
     *
     * @param content
     * @param filepath
     */
    public static void createQRCode2File(String content, String filepath) {
        try {
            QrCodeUtil.generate(content, initQrConfig(), FileUtil.file(filepath));
            log.info("生成二维码成功, 位置在：{"+filepath+"}！");
        } catch (QrCodeException e) {
            log.error("发生错误！ {"+e.getMessage()+"}！");
        }
    }

    /**
     * @param content
     * @param response
     */
    public static String createQRCode2Stream(String content, HttpServletResponse response) {
        try {
            //直接以流方式输出到页面
            // QrCodeUtil.generate(content, initQrConfig(), "png", response.getOutputStream());
            // 生成二维码字符数组并转化为字符串
            byte[] bytes = QrCodeUtil.generatePng(content, initQrConfig());
            BASE64Encoder encoder = new BASE64Encoder();
            String encode = encoder.encode(bytes);
            log.info("生成二维码成功!");
            return encode;
        } catch (Exception e) {
            log.error("发生错误！ {"+e.getMessage()+"}！");
            return "";
        }
    }
}





